public class VarArgsOverloading {
    static void f(Character... args) {
        System.out.print("first: ");
        for (Character c : args) {
            System.out.print(c + " ");
        }
        System.out.println();
    }

    static void f(Integer... args) {
        System.out.print("second: ");
        for (Integer i : args) {
            System.out.print(i + " ");
        }
        System.out.println();
    }

    static void f(Long... args) {
        System.out.print("third: ");
        for (Long l : args) {
            System.out.print(l + " ");
        }
    }

    public static void main(String[] args) {
        f('a', 'b', 'c');
        f(1);
        f(2, 1);
        f(0);
        f(0L);
        // f(); // Ambiguous method call
    }
}
/*
可变参数列表使重载过程变得更复杂了，因为编译器不能确定哪个重载方法应该被调用。
当不带参数调用f()时，编译器就不知道该调用哪一个了。
 */